CensusでSourceにSnowflakeを設定してみた
さがらです。
CensusでSourceにSnowflakeを設定してみたので、その内容をまとめてみます。
Snowflake側の手順
Snowflake側で、ロールやデータベースの準備が事前に必要です。
今回私は下記のクエリを実行しました。(公式ドキュメントのクエリを一部変更したものです。)
実際に試す際は既存のロールやウェアハウスを用いても問題はないため、必要な権限の参考にしてもらえればと思います。
-- 下記の変数を任意のものに変更してください。
SET CENSUS_ROLE = 'SAGARA_CENSUS_ROLE'; -- 新規作成:CENSUSとの連携に使用するロール
SET CENSUS_WAREHOUSE = 'SAGARA_CENSUS_WH'; -- 新規作成:CENSUSとの連携に使用するウェアハウス
SET CENSUS_DATABASE = 'SAGARA_CENSUS_DB'; -- 新規作成:CENSUSのAdvanced Sync用のデータを管理するデータベース
SET SOURCE_DATABASE = 'SAGARA_DBT_TEST_DB'; -- 既存:CENSUSでSourceに設定したいデータベース
SET SOURCE_SCHEMA = 'PRODUCTION'; -- 既存:CENSUSでSourceに設定したいスキーマ
SET CENSUS_USER = 'SAGARA_CENSUS'; -- 既存:CENSUSの認証に使用するユーザー
-- Create a role for the census user
USE ROLE SECURITYADMIN;
CREATE OR REPLACE ROLE IDENTIFIER($CENSUS_ROLE);
GRANT ROLE IDENTIFIER($CENSUS_ROLE) TO USER IDENTIFIER($CENSUS_USER);
-- Ensure the sysadmin role inherits any privileges the census role is granted. Note that this does not grant sysadmin privileges to the census role
GRANT ROLE IDENTIFIER($CENSUS_ROLE) TO ROLE SYSADMIN;
-- Create a warehouse for the census role, optimizing for cost over performance
USE ROLE SYSADMIN;
CREATE OR REPLACE WAREHOUSE IDENTIFIER($CENSUS_WAREHOUSE) WITH WAREHOUSE_SIZE = XSMALL AUTO_SUSPEND = 60 AUTO_RESUME = TRUE INITIALLY_SUSPENDED = TRUE;
GRANT USAGE ON WAREHOUSE IDENTIFIER($CENSUS_WAREHOUSE) TO ROLE IDENTIFIER($CENSUS_ROLE);
GRANT OPERATE ON WAREHOUSE IDENTIFIER($CENSUS_WAREHOUSE) TO ROLE IDENTIFIER($CENSUS_ROLE);
GRANT MONITOR ON WAREHOUSE IDENTIFIER($CENSUS_WAREHOUSE) TO ROLE IDENTIFIER($CENSUS_ROLE);
-- Let the census user read the data you want to sync
-- This database and schema must have a different name than CENSUS
USE ROLE SYSADMIN;
USE DATABASE IDENTIFIER($SOURCE_DATABASE);
USE SCHEMA IDENTIFIER($SOURCE_SCHEMA);
GRANT USAGE ON DATABASE IDENTIFIER($SOURCE_DATABASE) TO ROLE IDENTIFIER($CENSUS_ROLE);
GRANT USAGE ON SCHEMA IDENTIFIER($SOURCE_SCHEMA) TO ROLE IDENTIFIER($CENSUS_ROLE);
GRANT SELECT ON ALL TABLES IN SCHEMA IDENTIFIER($SOURCE_SCHEMA) TO ROLE IDENTIFIER($CENSUS_ROLE);
GRANT SELECT ON ALL VIEWS IN SCHEMA IDENTIFIER($SOURCE_SCHEMA) TO ROLE IDENTIFIER($CENSUS_ROLE);
GRANT USAGE ON ALL FUNCTIONS IN SCHEMA IDENTIFIER($SOURCE_SCHEMA) TO ROLE IDENTIFIER($CENSUS_ROLE);
USE ROLE ACCOUNTADMIN; -- なぜかSECURITYADMINでは私の環境でうまく動作しなかったため、止むを得ずACCOUNTADMINを使用しています
USE DATABASE IDENTIFIER($SOURCE_DATABASE);
USE SCHEMA IDENTIFIER($SOURCE_SCHEMA);
GRANT SELECT ON FUTURE VIEWS IN SCHEMA IDENTIFIER($SOURCE_SCHEMA) TO ROLE IDENTIFIER($CENSUS_ROLE);
GRANT SELECT ON FUTURE TABLES IN SCHEMA IDENTIFIER($SOURCE_SCHEMA) TO ROLE IDENTIFIER($CENSUS_ROLE);
GRANT USAGE ON FUTURE FUNCTIONS IN SCHEMA IDENTIFIER($SOURCE_SCHEMA) TO ROLE IDENTIFIER($CENSUS_ROLE);
-- Required for Advanced Sync Engine, not required for Basic Sync Engine:
-- Create a private bookkeeping database where Census can store sync state,
-- perform faster unloads, and keep Warehouse Writeback logs
USE ROLE SYSADMIN;
CREATE OR REPLACE DATABASE IDENTIFIER($CENSUS_DATABASE) comment = 'CENSUSのAdvanced Sync用のデータを管理するデータベース';
GRANT ALL PRIVILEGES ON DATABASE IDENTIFIER($CENSUS_DATABASE) TO ROLE IDENTIFIER($CENSUS_ROLE);
USE DATABASE IDENTIFIER($CENSUS_DATABASE);
CREATE OR REPLACE SCHEMA CENSUS;
GRANT ALL PRIVILEGES ON SCHEMA CENSUS TO ROLE IDENTIFIER($CENSUS_ROLE);
GRANT CREATE STAGE ON SCHEMA CENSUS TO ROLE IDENTIFIER($CENSUS_ROLE);
Census側の手順
Censusの画面で、左のSources
から右上のNew Source
を押します。
Snowflakeを選択します。
Snowflake Account Name
、Query Execution Warehouse
、User
、Password
など、Snowflakeに関わる設定情報を入力して、右下のConnect
を押します。
右下のConfirm
を押し、CensusとSnowflakeの接続が無事に確立されたら右下のFinish
を押します。(最後の`Run test syncが完了するまで、合計1~2分ほど要します。)
これでSourceの設定は完了です!